home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
m2
/
cat3src
/
magic
/
d
/
mttext.d
< prev
next >
Wrap
Text File
|
1997-10-26
|
6KB
|
150 lines
(*----------------------------------------------------------------------*
* *
* MAGICTOOLS Modula's All purpose GEM Interface Cadre Toolbox *
* ÿ ÿ ÿ ÿ ÿ *
*----------------------------------------------------------------------*
* Version 3.30 02.02.1992 (C)90/91/92 by Peter Hellinger Software *
*----------------------------------------------------------------------*
* Dieses Modul ist urheberrechtlich geschtzt. *
* *
* Die Verffentlichung des Quelltextes oder Teilen daraus, sowie die *
* Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
* oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail- *
* boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen *
* Einverstndnisserklrung des Autors. *
* *
* Die Verbreitung des Moduls als Teil eines gelinkten Programms ist *
* fr Lizenznehmer ausdrcklich erlaubt! Der Autor behlt sich das *
* Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
* widerrufen. *
*----------------------------------------------------------------------*)
(*----------------------------------------------------------------------*
* mtText Text als verkettete Liste. *
* *
* Die einzelnen Zeilen des Textes werden dynamisch alloziert. Ein *
* String mit 35 Zeichen belegt damit auch nur 36 Byte (35 + 1 Null- *
* char)! Die Strings sind IMMER Null-Terminiert! Strings mit Lnge *
* unter 8 Byte werden in einem statischen String gespeichert. Das ver- *
* ursacht aber keinen weiteren Speicherverbrauch (RECORD-Variante)! *
* *
* WICHTIG: Grte Lnge einer Zeilen ist im Augenblick 2048 Zeichen! *
*----------------------------------------------------------------------*)
DEFINITION MODULE mtText;
FROM MagicSys IMPORT Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
CONST MaxLength = 2048; (* 2 kB max. Lnge eines Strings *)
TYPE PtrString = POINTER TO ARRAY [0..MaxLength - 1] OF CHAR;
TYPE LINE; (* Linientype *)
TYPE TEXT; (* Texttyp *)
PROCEDURE NewTEXT (VAR text: TEXT): BOOLEAN;
(* Legt einen neuen TEXT an *)
PROCEDURE DisposeTEXT (VAR text: TEXT);
(* Lscht einen TEXT *)
(* Prozeduren mit Wirkung auf LINEs *)
PROCEDURE NewLine (VAR line: LINE; REF string: ARRAY OF CHAR): BOOLEAN;
(* Es wird eine LINE erzeugt und der Inhalt von 'string' kopiert.
* Achtung, die Zeile hat noch keinen Bezug zum einem TEXT! *)
PROCEDURE InsertLine (VAR text: TEXT; line, after: LINE);
(* Die Zeile wird nach 'after' eingefgt. Ist 'after' NIL, wird die
* Zeile zur ersten Zeile des Textes. Beispiel:
*
* IF NewLine (line, 'Det is eene Zeile, wa?') THEN
* InsertLine (text, line, LastLine (text));
* END;
*)
PROCEDURE PutLine (line: LINE; REF string: ARRAY OF CHAR): BOOLEAN;
(* Der Zeile 'line' wird 'string' zugewiesen.
* FALSE wenn fr den 'string' nicht gengend Speicher zur Verfgung
* steht. Der alte Inhalt von 'line' bleibt dann erhalten.
*)
PROCEDURE GetLine (line: LINE; VAR string: ARRAY OF CHAR);
(* 'string' wird der Inhalt von 'line' zugewiesen *)
PROCEDURE GetLinePtr (line: LINE): PtrString;
(* Liefert einen Zeiger auf den String aus 'line' *)
PROCEDURE LengthLine (line: LINE): sCARDINAL;
(* Liefert die Lnge einer Zeile *)
PROCEDURE DisposeLine (VAR line: LINE);
(* Lscht eine Zeile *)
PROCEDURE FirstLine (text: TEXT): LINE;
(* Liefert die erste Zeile eines Textes *)
PROCEDURE LastLine (text: TEXT): LINE;
(* Liefert die letzte Zeile eines Textes *)
PROCEDURE NextLine (line: LINE): LINE;
(* Liefert die auf 'line' folgende Zeile *)
PROCEDURE PrevLine (line: LINE): LINE;
(* Liefert die 'line' vorhergehende Zeile *)
PROCEDURE NilLine (): LINE;
(* Liefert ein leere (NIL) Zeile *)
(* Prozeduren mit Wirkung auf den ganzen Text *)
PROCEDURE GetNumber (text: TEXT): lCARDINAL;
(* Liefert die Anzahl der Zeilen im Text *)
PROCEDURE FindNumber (text: TEXT; num: lCARDINAL): LINE;
(* Liefert Zeile 'num' aus dem Text *)
TYPE SearchDir = (up, down);
PROCEDURE FindPos (text: TEXT; REF search: ARRAY OF CHAR; start: LINE;
dir: SearchDir; VAR pos: sCARDINAL): LINE;
(* Liefert eine Zeile, in der der String 'search' steht. 'start' ist die
* Startzeile, 'dir' ist die Richtung in der gesucht wird. 'pos' enthlt
* die Position des Suchstrings in der Zeile.
*)
PROCEDURE InsertText (VAR text, insert: TEXT; after: LINE);
(* Der Text 'insert' wird nach 'after' eingefgt. Ist 'after' NIL,
* wird 'insert' am Anfang von 'text' eingefgt.
* 'insert' ist nacher LEER!!!
*)
PROCEDURE ReadText (VAR text: TEXT; REF file: ARRAY OF CHAR): sINTEGER;
(* Liest einen Text von Diskette und legt ihn als verkettete Liste im
* Speicher an. Liefert einen Fehlercode: Fr Dateifehler die blichen
* GEMDOS-Fehlercodes (siehe MagicDOS) sowie fr einen Speicherfehler
* (zuwenig Speicher) MagicDOS.ENSMem (-39)
*)
PROCEDURE WriteText (text: TEXT; REF file: ARRAY OF CHAR): sINTEGER;
(* Schreibt einen als Liste organisierten Text in eine Datei. Liefert die
* blichen GEMDOS-Fehlercodes. Am Ende jeder Zeile wird der EndOfLine-
* String in die Datei geschrieben.
*)
PROCEDURE SetEndOfLine (text: TEXT; REF string: ARRAY OF CHAR);
(* Setzt den String, der am Ende jeder Zeile geschrieben wird.
* Defaultmssig ist hier CR/LF eingestellt.
*)
END mtText.